home *** CD-ROM | disk | FTP | other *** search
- ;----------------------------------------------------------------
- ;低速スムーススクロールダウン
- ; テキストの上から32行を4ドットずつスムーススクロールダウンします
- ; ラスタブロックコピーの順序を考慮しています
- ; ESCで終了します
-
- .include doscall.mac
- .include iocscall.mac
-
- ;----------------------------------------------------------------
- ;ラスタコピーマクロ
- ;<an.l:$00E88001に固定してあるアドレスレジスタ
- ;<dn.w:ソースラスタブロック番号*$0100+デスティネーションラスタブロック番号が
- ; 入っているレジスタ
- ;<sn.w:srを保存してあるレジスタ
- RASCPY .macro an,dn,sn
- @_1: tst.b (a0) ;水平帰線期間を待つ
- bmi @_1
- ori.w #$0700,sr ;割り込み禁止
- @_2: tst.b (a0) ;水平表示期間を待つ
- bpl @_2
- move.w dn,($00E8002C-$00E88001,an) ;ラスタブロック番号を設定
- move.w #8,($00E80480-$00E88001,an) ;ラスタコピー実行
- move.w sn,sr ;割り込み許可
- .endm
-
- ;----------------------------------------------------------------
- ;ラスタコピー終了マクロ
- ;<an.l:$00E88001に固定してあるアドレスレジスタ
- RASEND .macro an
- @_1: tst.b (a0) ;水平帰線期間を待つ
- bmi @_1
- @_2: tst.b (a0) ;水平表示期間を待つ
- bpl @_2
- move.w #$0000,($00E80480-$00E88001,a0) ;ラスタコピー終了(clrは避ける)
- .endm
-
- ;----------------------------------------------------------------
- ;次の垂直帰線期間を待つマクロ
- ;<an.l:$00E88001に固定してあるアドレスレジスタ
- VSYNC .macro an
- @_1: btst.b #4,(a0) ;垂直表示期間を待つ
- beq @_1
- @_2: btst.b #4,(a0) ;垂直帰線期間を待つ
- bne @_2
- .endm
-
- ;----------------------------------------------------------------
- ;----------------------------------------------------------------
- ;メインルーチン
-
- ;スーパーバイザモードへ移行
- clr.l -(sp)
- DOS _SUPER
- move.l d0,(sp)
-
- ;カーソル消去
- IOCS _B_CUROFF
-
- move.w $00E8002A,-(sp)
-
- ;1ラスタブロックずつスクロールダウン(ちゃんとやる)
- lea.l $00E88001,a0 ;$00E88001に固定
- move.w #$0001,d6 ;定数
- move.w #$0100,d7 ;定数
- move.w #%0011,($00E8002A-$00E88001,a0) ;ラスタコピープレーンセレクト
- move.w sr,d3 ;srを保存
- loop:
- VSYNC a0 ;次の垂直帰線期間を待つ
- move.w #$0080,d0 ;ラスタブロック0→128
- RASCPY a0,d0,d3
- move.w #$7F00,d0 ;ラスタブロック127→0
- RASCPY a0,d0,d3
- move.w #$0181,d4
- move.w #$8001,d5
- moveq.l #127-1,d1
- 1: move.w d4,d0 ;ラスタブロック1→129,2→128,3→129,…,127→129
- RASCPY a0,d0,d3
- move.w d5,d0 ;ラスタブロック128→1,129→2,128→3,…,128→127
- RASCPY a0,d0,d3
- add.w d7,d4
- eor.w d6,d4
- add.w d6,d5
- eor.w d7,d5
- dbra d1,1b
- RASEND a0
- btst.b #1,$0800.w ;ESCキーチェック
- beq loop
-
- move.w (sp)+,$00E8002A
-
- ;キーバッファフラッシュ
- bra 2f
- 1: IOCS _B_KEYINP
- 2: IOCS _B_KEYSNS
- tst.l d0
- bne 1b
-
- ;カーソル表示
- IOCS _B_CURON
-
- ;ユーザモードに復帰
- DOS _SUPER
- addq.l #4,sp
-
- ;終了
- DOS _EXIT
-